function switch_to_grub_config {
	set root="${1}"
	#	a) Check possible file locations...
	for p in boot/grub/libreboot_ grub/libreboot_ boot/grub/ grub/ boot/grub2 grub2/; do
		if [ -f "/${p}grub.cfg" ]; then
	#	b) And eventually try to load the config. Using ESC one can still exit and revert back to
	#	   libreboot's menu.
			configfile /${p}grub.cfg
		fi
	done
}
function parse_isolinux_config {
	set root=${1}
	for p in /isolinux /syslinux; do
		if [ -f "${p}${p}.cfg" ]; then
			syslinux_configfile -i ${p}${p}.cfg
		elif [ -f "/boot${p}${p}.cfg" ]; then
			syslinux_configfile -i /boot${p}${p}.cfg
		fi
	done
}
menuentry 'Load Operating System (incl. fully encrypted disks)  [o]' --hotkey='o' {

# GRUB handles (almost) every possible disk setup, but only the location of /boot is actually important,
# since GRUB only loads the user's config. As soon as the kernel takes over, libreboot's done.

# filesystems and encryption on both raw devices and partitions in all various combinations
# need to be supported. Since full disk encryption is possible with GRUB as payload and probably desired/used
# by most users, libreboot GRUB config tries to load the operating system (kernel) in the following way:

	# Try to decrypt raw devices first. This <your disk setup> inside a LUKS container is pretty common

	# prompt user for passphrase if LUKS header is found
	cryptomount ahci0
	for j in 1 2 3 4 5 6 7 8 9; do
		cryptomount ahci0,${j}
	done

	# 2. Look for user config. If the above routine successfully decrypted a LUKS container, its content
	#    will be searched before everything else for obvious reasons. Regardless of this, the devices'
	#    hirachy stays the same.
	for d in crypto0 ahci0; do
		switch_to_grub_config ${d}
	done
	for j in 1 2 3 4 5 6 7 8 9; do
		for d in crypto0 ahci0; do
			switch_to_grub_config "${d},${j}"
		done
	done
	for l in lvm/matrix-root lvm/matrix-boot; do
		switch_to_grub_config ${l}
	done

	# prompt user for passphrase if LUKS header is found but try using external keyfiles first
	search -n -f /keyfile --set=kf --hint usb0, --hint usb1,
	if [ $? = 0 ]; then
		kf="-k (${kf})/keyfile ${d}"
	fi
	for d in ${devs}; do
		cryptomount ${kf} ${d}
	done
	# 3. Do the same routine again, but for possibly decrypted data this time.
	switch_to_grub_config crypto0
	for j in 1 2 3 4 5 6 7 8 9; do
		switch_to_grub_config "crypto0,${j}"
	done
	for l in lvm/matrix-root lvm/matrix-boot; do
		switch_to_grub_config ${l}
	done

	# 3. Last resort, if none of the above succeeds, all you have is GRUB's shell
	set root=ahci0,1
	for p in / /boot/; do
		if [ -f "${p}vmlinuz" ]; then
			linux ${p}vmlinuz root=/dev/sda1 rw
			if [ -f "${p}initrd.img" ]; then
				initrd ${p}initrd.img
			fi
		fi
	done
}
menuentry 'Parse ISOLINUX menu (AHCI)  [a]' --hotkey='a' {
	# Check for filesystem on raw device without partition table (MBR/GPT), e.g. BTRFS or ZFS
	parse_isolinux_config ahci0
	# Look for partitions
	# GPT allows more than 4 partitions, /boot on /dev/sda7 is quite unlikely but still possible
	for j in 1 2 3 4 5 6 7 8 9; do
		parse_isolinux_config "ahci0,${j}"
	done
}
menuentry 'Parse ISOLINUX menu (USB)  [u]' --hotkey='u' {
	for i in 0 1; do
		# Check for filesystem on raw device without partition table (MBR/GPT), e.g. BTRFS or ZFS
		parse_isolinux_config usb${i}
		# Look for partitions
		# GPT allows more than 4 partitions, /boot on /dev/sda7 is quite unlikely but still possible
		for j in 1 2 3 4 5 6 7 8 9; do
			parse_isolinux_config "usb${i},${j}"
		done
	done
}
menuentry 'Parse ISOLINUX menu (CD/DVD)  [d]' --hotkey='d' {
	insmod ata
	for x in ata0 ahci1; do
		parse_isolinux_config ${x}
	done
}
menuentry 'Switch to grubtest.cfg  [t]' --hotkey='t' {
	set root=cbfsdisk
	configfile /grubtest.cfg
}
menuentry 'Search for GRUB configuration (grub.cfg) outside of CBFS  [s]' --hotkey='s' {
	insmod ahci
	insmod usbms
	insmod part_msdos
	insmod part_gpt
	for x in (ahci0,1) (ahci0,2) (ahci0,3) (ahci0,4) (usb0) (usb0,1) (usb0,2) (usb0,3) (usb0,4); do
		if [ -f "$x/grub/grub.cfg" ] ; then
			submenu "Load Config from $x" $x { 
				root=$2
				source /grub/grub.cfg
				unset superusers
			}
		fi
		if [ -f "$x/boot/grub/grub.cfg" ] ; then
			submenu "Load Config from $x" $x {
				root=$2
				source /boot/grub/grub.cfg
				unset superusers
			}
		fi
		if [ -f "$x/grub2/grub.cfg" ] ; then
			submenu "Load Config from $x" $x { 
				root=$2
				source /grub2/grub.cfg
				unset superusers
			}
		fi
		if [ -f "$x/boot/grub2/grub.cfg" ] ; then
			submenu "Load Config from $x" $x {
				root=$2
				source /boot/grub2/grub.cfg
				unset superusers
			}
		fi
	done
}
menuentry 'Poweroff  [p]' --hotkey='p' {
	halt
}
menuentry 'Reboot  [r]' --hotkey='r' {
	reboot
}
